package edu.cibertec.action;

import java.io.Reader;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

import edu.cibertec.bean.BeanProducto;

public class BuscarProductosAction extends Action {
	SqlMapClient sqlMap;
	
	public ActionForward execute ( ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response)
            throws Exception {
		
    	try {
    		String resource = "SqlMapConfigApplication.xml";
    		Reader reader = Resources.getResourceAsReader (resource);
    		sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
    	} catch (Exception e) {
    		e.printStackTrace();
    		throw new RuntimeException ("Error cargando configuracion en RedireccionandoAction Cause: " + e);
    	}
    	
		String forwardName = "failure";
		String parametro = request.getParameter("fdescripcion").toUpperCase().trim() + "%";
		
		System.out.println("INVOCANDO A STORE PROCEDURE CON parametro : " + parametro);

		// Invocacion a sentencia SQL normal
		//List listaProductos = sqlMap.queryForList("getProductosByDescripcion",  parametro);

		// Invocacion a STORE PROCEDURE IN
		List listaProductos = sqlMap.queryForList("exeProcedure01",  parametro);
		
		// Invocacion a STORE PROCEDURE OUT
		String salida = "***";
		Map mapa = new HashMap(2);
		mapa.put("uno", parametro);
		mapa.put("dos", salida);
		System.out.println("Variable salida antes de invocar al SP : " + salida);
		sqlMap.update("exeProcedure02",  mapa);
		System.out.println("Variable salida Despues de invocar al SP : " + mapa.get("dos"));
		
		// Invocacion a STORE PROCEDURE IN-OUT
		int a = 10;
		int b = 20;
		Map mapa2 = new HashMap(2);
		mapa2.put("uno", a);
		mapa2.put("dos", b);
		System.out.println("Variables antes de invocar al SP : a=" + mapa2.get("uno") + " - b=" + mapa2.get("dos"));
		sqlMap.update("exeProcedure03",  mapa2);
		System.out.println("Variables despues de invocar al SP : a=" + mapa2.get("uno") + " - b=" + mapa2.get("dos"));

		if ( listaProductos.size() > 0 ) {
			System.out.println("listaProductos.size es : " + listaProductos.size());
			HttpSession session = request.getSession();
			session.setAttribute("listaProductos",listaProductos);
		}

		// En los 2 casos es Success 
		forwardName = "success";

		return mapping.findForward(forwardName);
	}
	
}
